package com.example.demo.easyexcel.service.impl;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.PageReadListener;
import com.alibaba.fastjson.JSON;
import com.example.demo.easyexcel.db.entity.DemoData;
import com.example.demo.easyexcel.db.entity.TeacherData;
import com.example.demo.easyexcel.db.repository.TeacherDataRepository;
import com.example.demo.easyexcel.service.ModelService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author zjq
 * @version 创建时间：2021-12-17 15:06:52
 */
@Service
public class ModelServiceImpl implements ModelService {

    String PATH = "I:\\java\\";
    @Autowired
    private TeacherDataRepository teacherDataRepository;

    // 有数据文件
    private List<DemoData> data() {
        List<DemoData> list = new ArrayList<DemoData>();
        for (int i = 0; i < 10; i++) {
            DemoData data = new DemoData();
            data.setString("字符串" + i);
            data.setDate(new Date());
            data.setDoubleData(0.56);
            list.add(data);
        }
        return list;
    }

    // 无数据文件
    private List<DemoData> data1() {
        List<DemoData> list = new ArrayList<DemoData>();
        DemoData data = new DemoData();
        data.setString("字符串");
        data.setDoubleData(0.56);
        list.add(data);
        return list;
    }

    @Override
    public void exportTemplate() {
        // 写法2
        String fileName = PATH + "a.xlsx";
        // 这里 需要指定写用哪个class去读，然后写到第一个sheet，名字为模板 然后文件流会自动关闭
        // 如果这里想使用03 则 传入excelType参数即可
        EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data1());
    }

    @Override
    public void exportTemplates() {
        // 写法2
        String a = "新昌";
        String fileName = PATH + a + ".xlsx";

        // 这里 需要指定写用哪个class去读，然后写到第一个sheet，名字为模板 然后文件流会自动关闭
        // 如果这里想使用03 则 传入excelType参数即可

        List<TeacherData> list = teacherDataRepository.findAll();
//        System.out.println(list);
        EasyExcel.write(fileName, TeacherData.class).sheet(a).doWrite(list);
    }

    @Override
    public void importTemplate() {
        // 写法1：JDK8+ ,不用额外写一个DemoDataListener
        // since: 3.0.0-beta1
        String fileName = PATH + "a.xlsx";
        // 这里 需要指定读用哪个class去读，然后读取第一个sheet 文件流会自动关闭
        // 这里每次会读取3000条数据 然后返回过来 直接调用使用数据就行
        EasyExcel.read(fileName, DemoData.class, new PageReadListener<DemoData>(dataList -> {
            for (DemoData demoData : dataList) {
//                log.info("读取到一条数据{}", JSON.toJSONString(demoData));
                System.out.println(JSON.toJSONString(demoData));
            }
        })).sheet().doRead();

    }

}
